#ifndef POWER_MANAGEMENT_H
#define POWER_MANAGEMENT_H

#include <Arduino.h>
#include <esp_sleep.h>
#include <esp_bt.h>
#include <esp_bt_main.h>
#include <esp_pm.h>
#include <driver/rtc_io.h>
#include <driver/rtc_cntl.h>
#include <driver/uart.h>
#include <driver/gpio.h>
#include <SoftwareSerial.h>


// // 电源管理配置
// extern esp_pm_config_esp32s3_t pm_config;

// // 蓝牙空闲检测变量
// extern int64_t last_ble_activity;
// extern const int64_t BLE_IDLE_TIMEOUT;

// // 电源管理相关定义
// #define MAX_FREQ_MHZ 240  // 最大CPU频率
// #define MIN_FREQ_MHZ 80   // 最小CPU频率
// #define BLE_IDLE_TIMEOUT 5000000 // 蓝牙空闲超时时间（微秒）

// // 电源管理配置结构体
// typedef struct {
//     uint32_t max_freq_mhz;    // 最大CPU频率
//     uint32_t min_freq_mhz;    // 最小CPU频率
//     bool light_sleep_enable;  // 是否启用浅睡眠
// } power_management_config_t;

// // 串口配置
// #define UART_NUM_0_TX 1  // 电脑串口TX
// #define UART_NUM_0_RX 3  // 电脑串口RX
// #define UART_NUM_1_TX 3  // 语音模块TX
// #define UART_NUM_1_RX 46 // 语音模块RX
// #define UART_NUM_2_TX 38 // ID板TX
// #define UART_NUM_2_RX 45 // ID板RX

// 函数声明
void power_init();
void enter_power_save_mode();
void exit_power_save_mode();
void update_ble_activity();
bool is_ble_idle();
void update_serial_activity();
void update_encoder_activity();
bool is_encoder_idle();
bool is_serial_idle();
int64_t get_current_time();
void power_management_task(void *pvParameter);

// // 配置串口唤醒源
// void configure_uart_wakeup();

// // 配置蓝牙唤醒源
// void configure_ble_wakeup();

// // 配置所有唤醒源
// void configure_wakeup_sources();

// 外部变量声明
extern bool is_power_save_mode;
extern bool motor_enable;
extern int64_t last_ble_activity;

#endif // POWER_MANAGEMENT_H 